package com.ep.instruktor.plac;

import java.util.Date;

import com.ep.general.ActionSupportCustom;
import com.ep.general.instruktor.Instruktor;
import com.ep.general.instruktor.InstruktorMdt;
import com.ep.instruktor.app.login.LoginRequierd;
import com.ep.instruktor.plac.db.PlacManewrowy;

public class PlacManewrowyAction extends ActionSupportCustom<Instruktor>
		implements LoginRequierd {

	private static final long serialVersionUID = -4283091074392097654L;
	private PlacManewrowyView view;
	private PlacManewrowyForm form;
	private int placManewrowyId;
	private String PLAC_MANEWROWY_KEY = "placManewrowyKey";

	public String listByInstructor() {
		setDataArray(getView().getPlacInstruktor(getLoggedUser().getId()));
		return DATA_ARRAY;
	}

	public String listMiesiacByInstructor() {
		setDataArray(getView().getMonthPlacInstruktor(getLoggedUser().getId()));
		return DATA_ARRAY;
	}

	public String listTydzienByInstructor() {
		setDataArray(getView().getWeekPlacInstruktor(getLoggedUser().getId()));
		return DATA_ARRAY;
	}

	public String list() {
		setDataArray(getView().getPlac());
		return DATA_ARRAY;
	}

	public String listMiesiac() {
		setDataArray(getView().getMonthPlac());
		return DATA_ARRAY;
	}

	public String listTydzien() {
		setDataArray(getView().getWeekPlac());
		return DATA_ARRAY;
	}

	private PlacManewrowy newItem() {
		PlacManewrowy item = new PlacManewrowy();
		item.setData(new Date());
		item.setGodzinaPoczatkowa("07:00");
		item.setGodzinaKoncowa("22:00");
		item.setInstruktor(new InstruktorMdt().get(getLoggedUser().getId()));
		return item;
	}

	public String add() {
		getForm().setData(newItem());

		getSession().remove(PLAC_MANEWROWY_KEY);
		getSession().put(PLAC_MANEWROWY_KEY, getForm());

		return EDIT;
	}

	public String edit() {
		getForm().setData(new PlacManewrowyMdt().get(placManewrowyId));

		getSession().remove(PLAC_MANEWROWY_KEY);
		getSession().put(PLAC_MANEWROWY_KEY, getForm());

		return EDIT;
	}

	public String deleteOldRezerwations() {
		new PlacManewrowyMdt().deleteOldRezerwations();

		setText("Poprawnie usunięto stare rezerwacje placu");
		return TEXT_RESULT;
	}

	private boolean isValid(PlacManewrowy item, boolean isEdit) {
		if (!isEdit) {
			if (item.getData() == null) {
				setText("Proszę wybrać datę");
				return false;
			}
		}

//		if (item.getGodzinaPoczatkowa() > 24 || item.getGodzinaPoczatkowa() < 0) {
//			setText("Nieprawidłowo wprowadzone godziny poczatkowej!");
//			return false;
//		}
//
//		if (item.getGodzinaKoncowa() > 24 || item.getGodzinaKoncowa() < 0) {
//			setText("Nieprawidłowo wprowadzone godziny końcowej!");
//			return false;
//		}
//
//		if (item.getGodzinaKoncowa() < item.getGodzinaPoczatkowa()) {
//			setText("Godzina końcowa musi być większa od godziny początkowej!");
//			return false;
//		}

		return true;
	}

	public String saveNew() {
		if (getForm().getData() == null) {
			setText("Brak obiektu");
			return TEXT_RESULT;
		}

		if (!isValid(getForm().getData(), false)) {
			return TEXT_RESULT;
		}

		getForm().getData().setInstruktor(
				new InstruktorMdt().get(getLoggedUser().getId()));
		new PlacManewrowyMdt().makePersistent(getForm().getData());

		getSession().remove(PLAC_MANEWROWY_KEY);
		setText("Poprawnie zarezerwowano plac manewrowy");

		return TEXT_RESULT;
	}

	public String save() {
		PlacManewrowy placEdytowana = ((PlacManewrowyForm) getSession().get(
				PLAC_MANEWROWY_KEY)).getData();
		PlacManewrowy placNowa = getForm().getData();

		if (placEdytowana == null) {
			setText("Brak rezerwacji placu!");
			return TEXT_RESULT;
		}

		if (!isValid(placNowa, true)) {
			return TEXT_RESULT;
		}

		placNowa.setInstruktor(new InstruktorMdt().get(getLoggedUser().getId()));

		if (!placEdytowana.compareAndCopy(placNowa)) {
			setText("Brak zmian po edycji !");
			return TEXT_RESULT;
		}

		new PlacManewrowyMdt().makePersistent(placEdytowana);

		getSession().remove(PLAC_MANEWROWY_KEY);
		setText("Poprawnie zarezerwowano plac manewrowy");

		return TEXT_RESULT;
	}

	private PlacManewrowyView getView() {
		if (view == null)
			view = new PlacManewrowyView();
		return view;
	}

	public PlacManewrowyForm getForm() {
		if (form == null)
			form = new PlacManewrowyForm();
		return form;
	}

	public void setForm(PlacManewrowyForm form) {
		this.form = form;
	}

	public int getPlacManewrowyId() {
		return placManewrowyId;
	}

	public void setPlacManewrowyId(int placManewrowyId) {
		this.placManewrowyId = placManewrowyId;
	}

}
